package net.hn.hnms.sys.system.api;


import net.hn.hnms.biz.api.feign.base.FeignClientsConfigurationCustom;
import net.hn.hnms.sys.common.core.constant.ServiceNameConstants;
import net.hn.hnms.sys.common.core.exception.user.UserException;
import net.hn.hnms.sys.system.api.domain.SysUser;
import net.hn.hnms.sys.system.api.model.LoginUser;
import net.hn.hnms.sys.system.api.model.UserVo;
import net.hn.hnms.sys.system.api.model.XcxLoginUser;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.Collection;
import java.util.List;

/**
 * 用户服务
 *
 * @author Lion Li
 */
@FeignClient(contextId = "RemoteUserService", value = ServiceNameConstants.SYSTEM_SERVICE, configuration = FeignClientsConfigurationCustom.class)
public interface RemoteUserService {

    /**
     * 通过用户名查询用户信息
     *
     * @param username 用户名
     * @return 结果
     */
    @GetMapping(value = "remoteUser/getUserInfo")
    LoginUser getUserInfo(@RequestParam("username") String username) throws UserException;

    /**
     * 通过手机号查询用户信息
     *
     * @param phonenumber 手机号
     * @return 结果
     */
    @GetMapping(value = "/getUserInfoByPhonenumber")
    LoginUser getUserInfoByPhonenumber(@RequestParam("phonenumber")  String phonenumber) throws UserException;

    /**
     * 通过openid查询用户信息
     *
     * @param openid openid
     * @return 结果
     */
    @GetMapping(value = "/getUserInfoByOpenid")
    XcxLoginUser getUserInfoByOpenid(@RequestParam("openid") String openid) throws UserException;

    /**
     * 注册用户信息
     *
     * @param sysUser 用户信息
     * @return 结果
     */
    @PostMapping (value = "/registerUserInfo")
    Boolean registerUserInfo(@RequestBody SysUser sysUser);

    /**
     * 通过用户id查询用户信息
     *
     * @param id 用户id
     * @return 结果
     */
    @GetMapping (value = "remoteUser/getUserInfoById")
    LoginUser getUserInfoById(@RequestParam("id")  Long id);

    /**
     * 通过用户id查询Sys用户信息
     *
     * @param id 用户id
     * @return 结果
     */
    @GetMapping(value = "/remoteUser/getUserById")
     UserVo getUserById(@RequestParam("id") Long id);

    /**
     * 通过用户ids查询Sys用户信息
     *
     * @param idList 用户id
     * @return 结果
     */
    @GetMapping(value = "/remoteUser/getUserListIds")
    List<UserVo> getUserListIds(@RequestParam("idList") Collection<Long> idList);

    /**
     * 获取排除Ids的用户列表
     *
     * @param idList 用户id
     * @return 结果
     */
    @GetMapping(value = "/remoteUser/getUserListExcludeIds")
    List<UserVo> getUserListExcludeIds(@RequestParam("idList") Collection<Long> idList);

    /**
     * 获取所有用户信息
     *
     * @return 结果
     */
    @GetMapping(value = "/remoteUser/getUserAllList")
    List<UserVo> getUserAllList();

    /**
     * 通过用户id集合查询用户信息
     *
     * @param idList 用户集合
     * @return 结果
     */
    @GetMapping (value = "remoteUser/getUserListByIdList")
    List<LoginUser> getUserListByIdList(@RequestParam("idList") Collection<Long> idList);


    /**
     * 通过用户id查询用户信息
     *
     * @param username 用户名称
     * @return 结果
     */
    @GetMapping (value = "remoteUser/getUserListByUserName")
    List<LoginUser> getUserListByUserName(@RequestParam("username")  String username);
    /**
     * 通过用户中文查询用户信息集合
     *
     * @param username 用户中文名称
     * @return 结果
     */
    @GetMapping (value = "remoteUser/getUserListByChUserName")
    List<LoginUser> getUserListByChUserName(@RequestParam("username")  String username);

    /**
     * 用身份证查手机号
     * @param idCardList
     * @return
     */
    @GetMapping(value = "/getUserListByIdCardList")
    List<String> getUserListByIdCardList(@RequestBody Collection<String> idCardList);
    /**
     * 用身份证查手机号
     * @param depts
     * @return
     */
    @GetMapping(value = "remoteUser/getUserListByDept")
    List<String> getUserListByDept(@RequestParam("depts") Collection<Long> depts);

}
